package com.example.ailiyuncloud.service.Impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.ailiyuncloud.dto.CommodityConfigDto;
import com.example.ailiyuncloud.dto.CommoditySkuDto;
import com.example.ailiyuncloud.mapper.AddCommodityConfigMapper;
import com.example.ailiyuncloud.service.CommoditySkuConfigService;
import com.example.ailiyuncloud.service.CommoditySkuService;
import com.example.ailiyuncloud.vo.AddCommodityConfigVO;
import com.example.ailiyuncloud.vo.QueryCommoditySkuConfigVO;
import com.example.ailiyuncloud.vo.QueryCommoditySkuVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @Author: lqj
 * @Date: 2024-06-13 10:11:31
 * @Description:
 */
@Service
public class CommoditySkuConfigServiceImpl implements CommoditySkuConfigService {

    @Autowired
    private AddCommodityConfigMapper addCommodityConfigMapper;

    @Autowired
    private RedisTemplate<String, Object> stringRedisTemplate;

    @Autowired
    private CommoditySkuService commoditySkuService;


    @Override
    @Transactional
    public String addCommodityConfigService(List<AddCommodityConfigVO> addCommodityConfigVOList) throws Exception {
        if (ObjectUtils.isEmpty(addCommodityConfigVOList)) {
            throw new RuntimeException("参数为空或参数不正确，请检查！");
        }
        QueryCommoditySkuVO queryCommoditySkuVO = new QueryCommoditySkuVO();
        List<String> skuList = addCommodityConfigVOList.
                stream().distinct().map(AddCommodityConfigVO::getSkuId).collect(Collectors.toList());
        queryCommoditySkuVO.setSkuId(skuList);
        IPage<CommoditySkuDto> commoditySkuDtoIPage = commoditySkuService.queryCommoditySkuService(
                new Page(0, -1), queryCommoditySkuVO);
        if (skuList.size() != commoditySkuDtoIPage.getRecords().size()) {
            throw new RuntimeException("存在过期商品或已删除的商品请检查，请检查！");
        }
        Map<String, CommoditySkuDto> commoditySkuDtoCollect = commoditySkuDtoIPage.getRecords().stream().collect(Collectors.toMap(CommoditySkuDto::getSkuId, o -> o));

        addCommodityConfigVOList.forEach(addCommodityConfigVO -> {
            CommoditySkuDto commoditySkuDto = commoditySkuDtoCollect.get(addCommodityConfigVO.getSkuId());
            CommodityConfigDto commodityConfigDto = new CommodityConfigDto();
            commodityConfigDto.setConfigId(stringRedisTemplate.opsForValue().increment("CommodityConfig", 1));
            commodityConfigDto.setSkuId(commoditySkuDto.getSkuId());
            commodityConfigDto.setSpuId(commoditySkuDto.getSpuId());
            commodityConfigDto.setConfigName(addCommodityConfigVO.getConfigName());
            commodityConfigDto.setConfigPrice(addCommodityConfigVO.getConfigPrice());
            commodityConfigDto.setConfigInventory(addCommodityConfigVO.getConfigInventory());
            commodityConfigDto.setConfigPeriodOfValidity(addCommodityConfigVO.getConfigPeriodOfValidity());
            commodityConfigDto.setConfigType(addCommodityConfigVO.getConfigType());
            commodityConfigDto.setVipIs(addCommodityConfigVO.getVipIs());
            addCommodityConfigMapper.insert(commodityConfigDto);
        });

        return "配置添加成功";
    }

    @Override
    public IPage<CommodityConfigDto> queryCommoditySkuConfigService(Page page, QueryCommoditySkuConfigVO queryCommoditySkuConfigVO) {
        IPage<CommodityConfigDto> commodityConfigDtoIPage = addCommodityConfigMapper.queryCommoditySkuConfig(page, queryCommoditySkuConfigVO);
        return commodityConfigDtoIPage;
    }
}
